package cn.tedu._08security.service;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;

public class UserDetailsServiceImpl implements UserDetailsService {
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        /*
            实现认证和鉴权的逻辑;
            1.用户在浏览器中输入:http://localhost:8080/api/private/hello;
            2.[我们完成配置类]根据SecurityConfig中的配置,该请求需要认证,则重定向到登陆页面;
            3.用户在登录页中输入用户名和密码,点击登录按钮,向服务端发送请求,由Security接收并处理;
            4.[Security框架完成]到了UserDetailsService接口中的loadUserByUsername方法中;
            5.[我们完成数据库查询]根据用户名到数据表中查询该用户对应的密码[数据库中的密码];
            6.[Security框架完成]将数据库中的密码与用户输入的密码进行比较;
            7.[我们完成数据库查询]根据用户名到数据表中查询该用户对应的权限;
            8.[我们返回]将用户名和密码以及权限封装成UserDetails对象并返回给Security框架;
         */
        return User.withUsername(username)
                .password("{noop}123456") //{noop}表示密码是明文,不进行加密,从数据库中查询密码;
                .authorities("sys:private:view", "sys:private:edit") //从数据库中查询的该用户的权限;
                .build();
    }
}







